package com.iamteer.day12;
/**
主要回顾：字符串缓冲类（StringBuffer & StringBuilder）

StringBuffer 是一个存储字符的容器（内部是一个字符数组）
使用 StringBuffer 无参构造函数创建一个对象时，默认的初始容量是 16 个字符，如果长度不够使用，自动增长1倍+2

容器：
	增加
		append();	//添加任意类型数据
		insert(int offset, boolean b);
		
	删除
		delete(int start, int end);
		deleteCharAt(int index);
		
	修改
		ensureCapacity(int minimumCapacity);	//指定 StringBuffer 内部的字符数组长度，一般在构造方法上实现
		replace(int start, int end, String str);
		reverse();
		setCharAt(int index, char ch);
		substring(int start, int end);
	
	查询
		indexOf(String str, int fromIndex);	//查找指定字符串从 fromIndex 开始，首次出现的位置
		capacity();					//查看当前字符数组长度
		charAt(int index);			//指定的索引值查找字符
		lastIndexOf(String str);	//返回最后出现 str 的索引值
		length();					//返回目前字符串长度
		
StringBuffer 与 StringBuilder

	一、相同点：
		都是字符串缓冲类
		方法都是一致的
		
	二：不同点：
		StringBuffer 是线程安全的，相对效率低（JDK1.0）
		StringBuilder 则线程不安全，相对效率高（JDK1.5）
	
	
 */
public class StringBuf {

	public static void main(String[] args) {
		StringBuffer sBuffer = new StringBuffer();
		sBuffer.append("java");	//添加字符串
		sBuffer.append(true);	//添加布尔值
		sBuffer.append(3.14f);	//添加浮点数
		sBuffer.append(1024);	//添加整数
		sBuffer.append("中");	//添加字符
		sBuffer.append("java");	//添加字符
		
		System.out.println(sBuffer);
		
		sBuffer.insert(2, "小明");	//插入,也重载了不同类型
		System.out.println(sBuffer);

		sBuffer.delete(2, 4);		//包头不包尾，删除第 2、3 个字符
		System.out.println(sBuffer);
		
		sBuffer.deleteCharAt(16);	//删除指定索引值字符
		System.out.println(sBuffer);
		
		sBuffer.replace(4, 8, "fasle");	//替换指定字符
		System.out.println(sBuffer);
		
		sBuffer.reverse();			//反转字符串
		System.out.println(sBuffer);
		sBuffer.reverse();			//反转回来以便后面测试
		
		System.out.println(sBuffer.substring(4, 9));	//截取子字符串
		System.out.println(sBuffer.indexOf("java", 0));	//从fromIndex 开始，第一次出现 str 的位置
		System.out.println(sBuffer.lastIndexOf("java"));//最后一次出现 str 的位置
		System.out.println(sBuffer.capacity());		//当前内部字符串数组的长度 34: 16*2 + 2
		System.out.println(sBuffer.length());		//当前字符串长度
		System.out.println(sBuffer.charAt(1));		//返回索引值的字符
		System.out.println(sBuffer.toString());		//将序列以字符串形式表示
	}
}
